package com.jeeplus.modules.flowable.listener;

import java.util.Map;

import org.flowable.engine.delegate.DelegateExecution;
import org.springframework.stereotype.Component;

@Component("multiInstanceListener")
public class MultiInstanceListener {

	
	
	/**
	 * 获取会签是否结束
	 * @param execution 当前执行实例
	 * @return 是否结束
	 */
	public boolean getComplete(DelegateExecution execution) {
	    Integer nrOfCompletedInstances = (Integer) execution.getVariable("nrOfCompletedInstances");
	    Integer nrOfInstances = (Integer) execution.getVariable("nrOfInstances");
	    int agreeCount = 0, rejectCount = 0, abstainCount = 0;
	    
	    Map<String, Object> vars = execution.getVariables();
	    
	    for (String key : vars.keySet()) {
	        //会签投票以SIGN_VOTE+TaskId标识
	        //获得会签投票的统计结果
//	        if (key.contains(FlowConst.SIGN_VOTE) && !key.equals(FlowConst.SIGN_VOTE_RESULT)) {
//	            Integer value = (Integer) vars.get(key);
	            //统计同意、驳回、弃权票数
	            //省略代码若干......
//	        }
	    }
	    //以下为一段简单的规则，可以按情况实现自己的会签规则
	    if (!nrOfCompletedInstances.equals(nrOfInstances)) {
	        //必须等所有的办理人都投票
	        return false;
	    } else {
	        //会签全部完成时,使用默认规则结束
	        if (rejectCount > 0) {
	            //有反对票，则最终的会签结果为不通过
	            //移除SIGN_VOTE+TaskId为标识的参数
//	            removeSignVars(execution);
	            //增加会签结果参数，以便之后流转使用
//	            execution.setVariable(FlowConst.SIGN_VOTE_RESULT, false);
	            //会签结束
	            return true;
	        } else {
	            //没有反对票时，则最终的会签结果为通过
//	            removeSignVars(execution);
//	            execution.setVariable(FlowConst.SIGN_VOTE_RESULT, true);
	            return true;
	        }
	    }
	}
}
